/**
 * Module dependencies.
 */

var http = require('http');
var express = require('express');
var io = require('socket.io');

// Express 3.0 comptability
var app = express();
var server = http.createServer(app);
io = require('socket.io').listen(server);

// Configuration
app.configure(function() {
  app.use(express.static(__dirname + '/public'));
});

// Variables
var tabJoueurs = [];  //tableau contenant les joueurs
var tabBombes = []; //tableau contenant les bombes actuelles au jeu
var tabDecors = []; //tableau contenant les décors actuels au jeu
var strBackground = "images/background.jpg"; //L'image correspondant au Background du jeu
var intNbrJoueurs = 0; //le nombre de joueurs
var intNbrBombes = 0; //le nombre de bombes
var intNbrJoueursMax = 2;

io.sockets.on('connection', function (socket) {

	/******************************************************
	*	Communication avec le(s) client(s)
	******************************************************/
	
	socket.on('ConnecterClient', function (){
		console.log("Client connecte ");
		//On envoie la map actuelle au nouveau joueur
		socket.emit('RecupererMap', strBackground, tabDecors);
		//On envoie les joueurs déjà connectés
		socket.emit('RecupererJoueurs',tabJoueurs);
		//On ajoute le nouveau personnage (s'il y a de la place)
		console.log("Données correctement envoyées");
	});
	
	socket.on('Jouer', function (strImage){
		//On l'envoie l'ID du joueur qui vient de se connecter
		socket.emit('RecupererID',tabJoueurs.length);
		//On crée le nouveau personnage
		AjouterPerso(strImage);
		//On envoie le personnage à tous les joueurs
		io.sockets.emit('RecupererNouveauPerso',tabJoueurs[intNbrJoueurs - 1]);
		console.log("Nouveau personnage envoyé");
	});
	
	//Lancer déplacement d'un des persos de la map
	socket.on('LancerDeplacement', function LancerDeplacement(ID, Direction, x, y) {
		//On envoie le déplacement à tous les joueurs
		io.sockets.emit('LancerDeplacementPerso',ID, Direction, x, y);
		/*tabJoueurs[ID].x = x;
		tabJoueurs[ID].y = y;*/
		console.log("Lancement du déplacement effectué");
	});
	
	//Immobiliser un des persos de la map
	socket.on('ImmobiliserPerso', function ImmobiliserPerso(ID, Direction, x, y) {
		io.sockets.emit('ImmobiliserPerso', ID, Direction, x, y);
		console.log("Perso immobilisé");
	});
	
	//Poser une bombe sur la map
	socket.on('PoserBombe', function PoserBombe(ID, x, y){
		AjouterBombe(x, y);
		io.sockets.emit('PoserBombePerso', ID, tabBombes[intNbrBombes - 1]);
		console.log("Bombe Posée");
	});
	
	//Exploser une bombe
	socket.on('ExploserBombe', function ExploserBombe(ID, idBombe){
		tabBombes.splice(idBombe, 1);
		intNbrBombes -= 1;
		io.sockets.emit('ExploserBombePerso', ID, idBombe);
		console.log("Bombe explosée");
	});
	
	//Tuer un perso
	socket.on('TuerPerso', function ExploserBombe(ID, idPerso){
		//tabJoueurs[idPerso] = null;
		io.sockets.emit('TuerPerso', ID, idPerso);
		console.log("Tuer perso");
	});
	
	/******************************************************
	*	Fonction du serveur
	******************************************************/
	
	//Ajouter le persos à une position selon son ordre d'arrivée
	function AjouterPerso(strImage) {
		var perso = {
			id : intNbrJoueurs,
			image : strImage,
			x : 0,
			y : 0,
			width : 32,
			height : 48
		};
		switch (intNbrJoueurs){
			case 0:
				perso.x = 25;
				perso.y = 25;
				break;
			case 1:
				perso.x = 900;
				perso.y = 25;
				break;
			default:
				perso.x = 150;
				perso.y = 150;
		}
		tabJoueurs[intNbrJoueurs] = perso;
		intNbrJoueurs ++;
	}
	
	//Ajouter une bombe 
	function AjouterBombe(x, y) {
		var bombe = {
			id : intNbrBombes,
			x : x,
			y : y
		};
		tabBombes[intNbrBombes] = bombe;
		intNbrBombes ++;
	}

});

// Port d'écoute
server.listen(8080);
console.log("Server working on http://localhost:8080");